const Queue = require('bull');
const { exportType0 } = require('../exportType0');
const fs = require('fs');
const path = require('path');

// 创建日志目录
const logDir = path.join(__dirname, '../../logs');
if (!fs.existsSync(logDir)) {
  fs.mkdirSync(logDir, { recursive: true });
}

// 日志记录函数
function logToFile(message) {
  const timestamp = new Date().toISOString();
  const logMessage = `[${timestamp}] ${message}\n`;
  fs.appendFileSync(path.join(logDir, 'excel-queue.log'), logMessage);
  console.log(`[${new Date().toLocaleString()}] ${message}`);
}

// 创建Excel生成队列
const excelQueue = new Queue('excel-generation', {
  redis: {
    host: 'localhost',  // Redis服务器地址
    port: 6379,         // Redis端口
  }
});

// 定义处理器
excelQueue.process(async (job) => {
  try {
    const startTime = Date.now();
    logToFile(`开始处理Excel生成任务 #${job.id}, 数据ID: ${job.data.id}`);
    const inspectData = job.data.inspectData;
    const fileUrl = await exportType0(inspectData);
    const duration = ((Date.now() - startTime) / 1000).toFixed(2);
    logToFile(`Excel文件生成成功，URL: ${fileUrl}，耗时: ${duration}秒`);
    return { success: true, fileUrl };
  } catch (err) {
    logToFile(`生成Excel文件失败: ${err.message}`);
    logToFile(`错误堆栈: ${err.stack}`);
    throw err;
  }
});

// 监听完成事件
excelQueue.on('completed', (job, result) => {
  logToFile(`任务 #${job.id} 已完成，结果: ${JSON.stringify(result)}`);
});

// 监听失败事件
excelQueue.on('failed', (job, err) => {
  logToFile(`任务 #${job.id} 失败: ${err.message}`);
});

// 添加更多事件监听
excelQueue.on('stalled', (job) => {
  logToFile(`任务 #${job.id} 已停滞，可能需要检查`);
});

excelQueue.on('error', (error) => {
  logToFile(`队列发生错误: ${error.message}`);
});

module.exports = excelQueue;